/**
 * 系统组织架构的设置
 */
OrgSettingView = Ext.extend(Ext.Panel, {
	constructor : function(conf) {
		Ext.applyIf(this, conf);
		this.initUI();
		OrgSettingView.superclass.constructor.call(this, {
					id : 'OrgSettingView',
					title : '系统组织架构设置',
					iconCls : 'menu-OrgSetting',
					layout : 'border',
					items : [this.orgPanel, this.centerPanel]
				});
	},
	// 初始化UI
	initUI : function() {
		// 组织树Panel
		this.orgPanel = new Ext.ux.TreePanelEditor({
					region : 'west',
					title : '组织架构',
					width : 240,
					collapsible : true,
					split : true,
					url : __ctxPath + '/system/treeDepartment.do',
					scope : this,
					autoScroll : true,
					onclick : this.orgTreeClick,
					treeType : 'org',
					contextMenuItems : [{
								text : '新建组织',
								iconCls : 'btn-add',
								scope : this,
								handler : this.addOrg
							}, {
								text : '编辑组织',
								iconCls : 'btn-edit',
								scope : this,
								handler : this.editOrg
							}, {
								text : '删除组织',
								iconCls : 'btn-del',
								scope : this,
								handler : this.delOrg
							}, '-', {
								text : '加入人员',
								iconCls : 'btn-add',
								scope : this,
								handler : this.addUser
							}]
				});
		// 组织详情
		var depId = depId || 0;
		this.orgDetailPanel = new Ext.Panel({
					border : false,
					autoScroll : true,
					height : 180,
					region : 'north',
					tbar : [{
								text : '新建组织',
								iconCls : 'btn-add',
								scope : this,
								handler : this.addOrg
							}],
					loader : {
						url : __ctxPath + '/system/detailDepartment.do',
						autoLoad : true,
						params : {
							depId : depId
						}
					}
				});

		var depId = depId || '';
		this.userGridPanel = new KE.GridPanel({
					tbar : [{
								iconCls : 'btn-refresh',
								text : '刷新',
								xtype : 'button',
								scope : this,
								handler : function() {
									this.userGridPanel.getStore().reload();
								}
							}, '-', {
								xtype : 'button',
								text : '加入人员',
								iconCls : 'btn-add',
								scope : this,
								handler : this.addUser
							}, {
								xtype : 'button',
								text : '移出人员',
								iconCls : 'btn-del',
								scope : this,
								handler : this.removeUserOrg
							}, {
								text : '添加新人员',
								iconCls : 'btn-users',
								scope : this,
								handler : this.addNewUser
							}],
					region : 'center',
					rowActions : true,
					title : '组织人员列表',
					url : __ctxPath + '/system/depUsersAppUser.do',
					baseParams : {
						depId : depId
					},
					fields : ['userId', 'fullname', 'username'],
					columns : [{
								header : '账号',
								dataIndex : 'username'
							}, {
								header : '姓名',
								dataIndex : 'fullname'
							}, {
								header : '管理',
								xtype : 'actioncolumn',
								width : 60,
								items : [{
											iconCls : 'btn-del',
											tooltip : '删除人员的组织架构',
											scope : this,
											handler : this.deleteRs
										}, {
											iconCls : 'btn-edit',
											tooltip : '编辑人员信息',
											scope : this,
											handler : this.editRs
										}]
							}]
				});
		// 右边Panel
		this.centerPanel = new Ext.Panel({
					region : 'center',
					title : '组织属性设置',
					layout : 'border',
					items : [this.orgDetailPanel, this.userGridPanel]
				});
	},

	// 添加组织的人员
	addUser : function() {
		var depId = 0;
		var selNode = this.orgPanel.selectedNode;
		if (selNode) {
			depId = selNode.id;
		}
		if (depId == 0) {
			Ext.ux.Toast.msg('操作信息', '请选择对应的组织!');
			return;
		}

		// 弹出用户选择器，根据当前选择的节点，把用户加入该组织或单位
		new UserDialog({
					title : '加入新用户',
					scope : this,
					single : false,
					callback : function(ids, names) {
						Ext.Ajax.request({
									method : 'POST',
									scope : this,
									url : __ctxPath
											+ '/system/addOrgsUserOrg.do',
									params : {
										userIds : ids,
										depId : depId
									},
									success : function(resp, options) {
										this.userGridPanel.getStore().reload();
									}
								});
					}
				}).show();
	},
	// 添加新用户
	addNewUser : function() {
		if (this.orgPanel.selectedNode == null) {
			Ext.ux.Toast.msg('操作信息', '请选择左边的组组织树！');
			return;
		}
		var depId = this.orgPanel.selectedNode.id;
		var orgName = this.orgPanel.selectedNode.text
				|| this.orgPanel.selectedNode.data.text;
		App.clickTopTab('UserFormPanel', {
					depId : depId
				});
	},
	// 编辑用户信息
	editRs : function(grid, rowIndex, colIndex) {
		var record = grid.getStore().getAt(rowIndex);
		App.clickTopTab('UserFormPanel_' + record.data.userId, {
					userId : record.data.userId,
					username : record.data.username
				});
	},
	// 行删除
	deleteRs : function(grid, rowIndex, colIndex) {
		var record = grid.getStore().getAt(rowIndex);
		this.removeUserOrg('deleteRs', record.data.userId);
	},
	// 删除单位人员
	removeUserOrg : function(type, ids) {
		var me = this;
		if (this.orgPanel.selectedNode == null) {
			Ext.ux.Toast.msg("信息", "请先选择组织！");
			return;
		}
		if (type != 'deleteRs') {
			var grid = this.userGridPanel;
			var selectRecords = grid.getSelectionModel().getSelection();
			if (selectRecords.length == 0) {
				Ext.ux.Toast.msg("信息", "请选择要删除的记录！");
				return;
			}
			ids = Array();
			for (var i = 0; i < selectRecords.length; i++) {
				ids.push(selectRecords[i].data.userId);
			}
		}
		Ext.Msg.confirm('删除操作', '注意：要删除该人员与组织的关系吗？', function(btn) {
					if (btn == 'yes') {
						Ext.Ajax.request({
									url : __ctxPath + '/system/multiDelUserOrg.do',
									method : 'post',
									params : {
										ids : ids.toString(),
										depId : me.orgPanel.selectedNode.id
									},
									success : function(response) {
										var result = Ext.util.JSON
												.decode(response.responseText);
										if (result.msg == null) {
											Ext.ux.Toast.msg("操作信息", "人员删除成功");
										}
										me.userGridPanel.getStore().reload();
									},
									failure : function() {
										Ext.ux.Toast.msg("操作信息", "人员删除失败");
									}
								});
					}
				}, this);
	},

	// 重新加载组织树
	reloadOrganization : function() {
		this.orgPanel.store.reload();
	},

	// 组织树节点点击
	orgTreeClick : function(view, node) {
		this.depId = node.id;
		this.orgType = node.data.orgType;
		this.orgName = node.data.text;
		// 加载组织详情
		this.orgDetailPanel.loader.params = {
			depId : this.depId
		};
		this.orgDetailPanel.loader.load();

		// var tbar =
		// this.orgDetailPanel.getDockedItems('toolbar[dock="top"]')[0];
		// if(tbar.items.length > 1) {
		// tbar.items.removeRange(1, tbar.items.length-1);
		// }
		// // 增加按钮
		// if (this.orgType == 0) {// 集团下才能添加公司
		// tbar.add(['-', {
		// text : '添加公司',
		// iconCls : 'btn-add',
		// scope : this,
		// handler: this.addCompany
		// }, '-', {
		// text : '添加单位',
		// iconCls : 'btn-add',
		// scope : this,
		// handler:this.addDepartment
		// }]);
		// } else if (this.orgType == 1 || this.orgType == 2) {// 公司或单位下才允许添加单位
		// tbar.add(['-', {
		// text : '添加单位',
		// iconCls : 'btn-add',
		// scope : this,
		// handler:this.addDepartment
		// }]);
		// }

		// 加载组织用户
		this.userGridPanel.store.proxy.extraParams = {
			depId : this.depId
		};
		this.userGridPanel.store.reload();
	},
	// 增加公司
	addCompany : function(depId, orgName) {
		new CompanyWin({
					orgSupId : this.depId,
					supOrgName : this.orgName,
					scope : this,
					callback : this.addCompanyCallback
				}).show();
	},

	// 公司添加回调
	addCompanyCallback : function() {
		this.orgPanel.store.reload();
	},
	// 添加单位
	addDepartment : function() {
		new DepartmentWin({
					orgSupId : this.depId,
					supOrgName : this.orgName,
					scope : this,
					callback : this.addDepartmentCallback
				}).show();
	},
	// 添加单位回调
	addDepartmentCallback : function() {
		this.orgPanel.store.reload();
	},
	// 新建组织
	addOrg : function() {
		if (this.orgPanel.selectedNode == null) {
			Ext.ux.Toast.msg('操作信息', '请选择左边的组组织树！');
			return;
		}
		var depId = this.orgPanel.selectedNode.id;
		var orgType = this.orgPanel.selectedNode.orgType
				|| this.orgPanel.selectedNode.data.orgType;
		var supOrgName = this.orgPanel.selectedNode.text
				|| this.orgPanel.selectedNode.data.text;
		new OrganizationForm({
					orgSupId : depId,
					orgType : orgType,
					supOrgName : supOrgName,
					isAdd : true,
					scope : this,
					callback : this.reloadOrganization
				}).show();
	},
	// 编辑组织
	editOrg : function() {
		var depId = this.orgPanel.selectedNode.id;
		if (depId == 0)
			return;
		var orgType = this.orgPanel.selectedNode.orgType;
		var supOrgName = this.orgPanel.selection.parentNode.data.text;
		new OrganizationForm({
					depId : depId,
					orgType : orgType,
					supOrgName : supOrgName,
					isAdd : false,
					scope : this,
					callback : this.reloadOrganization
				}).show();
	},
	
	//设置为特殊考评人员
	special : function() {
		var userId = this.userGridPanel.selection.data.userId;
		var fullname = this.userGridPanel.selection.data.fullname;
		Ext.MessageBox.confirm('提示', '您确认要将 '+fullname+' 设置为特殊评考人员吗？', function (id) {
			if (id=='yes') {
				$postAjax({
					url : __ctxPath + '/system/specialUserOrg.do?userId='+userId,
					grid: this.gridPanel
				});
			}
		}); 

	},
	
	// 删除组织
	delOrg : function() {
		// var dem = this.orgPanel.selectedNode.attributes.orgDem;
		// if(dem==1){
		// Ext.ux.Toast.msg('操作信息','行政维度的组织不能删除!');
		// return;
		// }
		var depId = this.orgPanel.selectedNode.id;
		if (depId == 0)
			return;
		Ext.Msg.confirm('信息确认', '注意：删除该组织将会删除其下所有的子组织，您确认要删除所选组织吗？', function(
				btn) {
			if (btn == 'yes') {
				Ext.Ajax.request({
							url : __ctxPath + '/system/multiDelDepartment.do',
							method : 'POST',
							scope : this,
							params : {
								ids : depId
							},
							success : function(response, options) {
								var json=Ext.util.JSON.decode(response.responseText);
								if(json.success) {
									Ext.ux.Toast.msg('操作信息', '成功删除该组织!');
									this.reloadOrganization.call(this);
								} else {
									Ext.ux.Toast.msg('操作信息', json.msg);
								}
							},
							failure : function(response, options) {
								Ext.ux.Toast.msg('操作信息', '操作出错，请联系管理员！');
							}
						});
			}
		}, this);
	}
});